package Java中的集合.ArrayListApply;

import java.util.ArrayList;
import java.util.List;

/**
 * @Auther:云尚学Java
 */
public class Student_Test {
    public static void main(String[] args) {
        /**
         * 实例化5个对象，用于充当5个学生
         */
        Student s1=new Student("刘德华",85);
        Student s2=new Student("张学友",100);
        Student s3=new Student("刘杰",65);
        Student s4=new Student("章子怡",58);
        Student s5=new Student("周迅",76);
        //声明ArrayList集合用于存储5个学生的信息
        List<Student> list=new ArrayList<Student>();
        //将构件好的5个学生添加到ArrayList集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);
        System.out.println("集合中存储的元素：");
        for (Student student : list) {
            System.out.println(student);
        }
        //1.输出ArrayList中的对象个数,也就是实际存储元素的个数
        int size=list.size();
        System.out.println("元素个数："+size);
        //2、删除姓名为“刘杰”的学生信息，并输出ArrayList中现有学生信息。
        /**
         * 方式一
         * for(int i=0;i<list.size();i++){
            //循环遍历的过程中依次获取每一个元素，然后比较判断，找出姓名为刘杰的同学然后删掉
            Student student=list.get(i);
            //找出姓名为刘杰的同学
            if(student.getName().equals("刘杰")){
                //删除姓名为刘杰的信息
                list.remove(i);
            }
        }*/
        /**
         * 方式二：从后往前删除
         * for(int i=list.size()-1;i>=0;i--){
            //循环遍历的过程中依次获取每一个元素，然后比较判断，找出姓名为刘杰的同学然后删掉
            Student student=list.get(i);
            //找出姓名为刘杰的同学
            if(student.getName().equals("刘杰")){
                //删除姓名为刘杰的信息
                list.remove(i);
            }
        }*/
        /**
         * 方式三：采用迭代器进行元素遍历
         * Iterator<Student> iterator=list.iterator();//将集合中的元素转换为迭代器进行存储
        //采用while循环进行元素遍历
        while(iterator.hasNext()){
            Student student=iterator.next();//将元素取出
            //判断该同学是否是刘杰
            if(student.getName().equals("刘杰")){
                //是刘杰的情况下，删除
                iterator.remove();
            }
        }*/
        //重新遍历元素输出
        for (Student student : list) {
            System.out.println(student.toString());
        }
        // 3、将姓名为“刘德华”的学生成绩改为95。
        for(int i=0;i<list.size();i++){
            Student student=list.get(i);
            if(student.getName().equals("刘德华")){
                System.out.println("未修改之前的成绩："+student.getScore());
                student.setScore(95);
            }
        }
        System.out.println("==========");
        //修改之后重新遍历
        for (Student student : list) {
            System.out.println(student.toString());
        }
        System.out.println("==========");
        // 4、输出成绩不及格的学生姓名
        for(int i=0;i<list.size();i++){
            //循环的过程中，获取每一个学生，然后进行判断，找出成绩小于60分的学生信息
            Student student=list.get(i);   //get(index)根据索引获取某一元素的位置
            if(student.getScore()<60){
                //成绩小于60分
                //System.out.println("姓名："+student.getName()+"——分数："+student.getScore());
                System.out.println(student.toString());
            }
        }
        /**
         *
         * 对于集合而言，存储的只是一个对象的引用而已，并不是实例本身，ArrayList集合也是一样
         * 正是因为这一点 Student s = list.get(i);
         * 根据索引获取所谓的元素s 才能够调用Student类下的方法
         * 以为集合存储的只是一个对象的引用而已
         * 这一点和数组是是一样的。
         */
    }
}
